<html>
<head><meta charset="utf-8"><title>const qualification on escaping scope &quot;locals&quot; · t-compiler/const-eval · Zulip Chat Archive</title></head>
<h2>Stream: <a href="https://rust-lang.github.io/zulip_archive/stream/146212-t-compiler/const-eval/index.html">t-compiler/const-eval</a></h2>
<h3>Topic: <a href="https://rust-lang.github.io/zulip_archive/stream/146212-t-compiler/const-eval/topic/const.20qualification.20on.20escaping.20scope.20.22locals.22.html">const qualification on escaping scope &quot;locals&quot;</a></h3>

<hr>

<base href="https://rust-lang.zulipchat.com">

<head><link href="https://rust-lang.github.io/zulip_archive/style.css" rel="stylesheet"></head>

<a name="221475088"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/146212-t-compiler/const-eval/topic/const%20qualification%20on%20escaping%20scope%20%22locals%22/near/221475088" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> oli <a href="https://rust-lang.github.io/zulip_archive/stream/146212-t-compiler/const-eval/topic/const.20qualification.20on.20escaping.20scope.20.22locals.22.html#221475088">(Jan 03 2021 at 22:42)</a>:</h4>
<p>So... with <a href="https://github.com/rust-lang/rust/pull/80418">https://github.com/rust-lang/rust/pull/80418</a> and <a href="https://github.com/rust-lang/rust/pull/78578">https://github.com/rust-lang/rust/pull/78578</a> we are now analyzing which "locals" have no <code>StorageDead</code>. We should <em>at least</em> also analyze that there is exactly one <code>StorageLive</code>, but any of that feels too much like "if it quacks like a non-local local it is a non-local local". Instead it would be great if we had a more robust way to identify those locals. There are various things that come to mind:</p>
<ol>
<li>add a "list of escaping locals" to <code>mir::Body</code> of the locals for which we want this to apply.</li>
<li>We already have <em>one</em> such local, it is <code>_0</code>. how about we make the first <code>return_values</code> locals behave like the return value local <code>_0</code> and only start with the arguments after those locals?</li>
<li>we need a way to figure out these locals during MIR building. I have currently no idea how to do that, but somewhere in THIR we must be special casing the final expression in a block and figuring out that it has no scope that would <code>StorageDead</code> the locals in it, so maybe we need to preprocess that block to allocate its locals and then fill them in once we actually lower the expression to THIR. Or we mark those locals during THIR lowering and move them around afterwards? Or we have a MIR pass that runs right after MIR building that rewrites the MIR for 2. or computes the list for 1.?</li>
</ol>



<a name="221475106"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/146212-t-compiler/const-eval/topic/const%20qualification%20on%20escaping%20scope%20%22locals%22/near/221475106" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> oli <a href="https://rust-lang.github.io/zulip_archive/stream/146212-t-compiler/const-eval/topic/const.20qualification.20on.20escaping.20scope.20.22locals.22.html#221475106">(Jan 03 2021 at 22:43)</a>:</h4>
<p><a href="https://github.com/rust-lang/rust/issues/53819">https://github.com/rust-lang/rust/issues/53819</a> has the history of discussion on this issue</p>



<a name="221529737"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/146212-t-compiler/const-eval/topic/const%20qualification%20on%20escaping%20scope%20%22locals%22/near/221529737" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> RalfJ <a href="https://rust-lang.github.io/zulip_archive/stream/146212-t-compiler/const-eval/topic/const.20qualification.20on.20escaping.20scope.20.22locals.22.html#221529737">(Jan 04 2021 at 14:35)</a>:</h4>
<blockquote>
<p>We already have one such local, it is _0. how about we make the first return_values locals behave like the return value local _0 and only start with the arguments after those locals?</p>
</blockquote>
<p>Not really, that's just an optimization... conceptually, the content of <code>_0</code> is copied to the caller-allocated return place on <code>return</code>, and then <code>_0</code> is deallocated like all the other locals.</p>



<a name="221530339"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/146212-t-compiler/const-eval/topic/const%20qualification%20on%20escaping%20scope%20%22locals%22/near/221530339" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> oli <a href="https://rust-lang.github.io/zulip_archive/stream/146212-t-compiler/const-eval/topic/const.20qualification.20on.20escaping.20scope.20.22locals.22.html#221530339">(Jan 04 2021 at 14:40)</a>:</h4>
<p>right... which works just as well for us</p>



<a name="221530347"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/146212-t-compiler/const-eval/topic/const%20qualification%20on%20escaping%20scope%20%22locals%22/near/221530347" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> oli <a href="https://rust-lang.github.io/zulip_archive/stream/146212-t-compiler/const-eval/topic/const.20qualification.20on.20escaping.20scope.20.22locals.22.html#221530347">(Jan 04 2021 at 14:40)</a>:</h4>
<p>oh wait, no, we reference things</p>



<a name="221530424"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/146212-t-compiler/const-eval/topic/const%20qualification%20on%20escaping%20scope%20%22locals%22/near/221530424" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> oli <a href="https://rust-lang.github.io/zulip_archive/stream/146212-t-compiler/const-eval/topic/const.20qualification.20on.20escaping.20scope.20.22locals.22.html#221530424">(Jan 04 2021 at 14:41)</a>:</h4>
<p>but... we were talking about NRVO for a while, and that always sounded to me like we'd end up allowing you to write/reference the return place</p>



<a name="221542462"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/146212-t-compiler/const-eval/topic/const%20qualification%20on%20escaping%20scope%20%22locals%22/near/221542462" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> RalfJ <a href="https://rust-lang.github.io/zulip_archive/stream/146212-t-compiler/const-eval/topic/const.20qualification.20on.20escaping.20scope.20.22locals.22.html#221542462">(Jan 04 2021 at 16:08)</a>:</h4>
<p>I'm not up-to-date with that discussion and its operational foundation</p>



<a name="221545755"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/146212-t-compiler/const-eval/topic/const%20qualification%20on%20escaping%20scope%20%22locals%22/near/221545755" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> oli <a href="https://rust-lang.github.io/zulip_archive/stream/146212-t-compiler/const-eval/topic/const.20qualification.20on.20escaping.20scope.20.22locals.22.html#221545755">(Jan 04 2021 at 16:30)</a>:</h4>
<p>ok, so I guess let's scrap <code>2.</code>, due to unclear motivation and implications</p>



<a name="221555597"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/146212-t-compiler/const-eval/topic/const%20qualification%20on%20escaping%20scope%20%22locals%22/near/221555597" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> RalfJ <a href="https://rust-lang.github.io/zulip_archive/stream/146212-t-compiler/const-eval/topic/const.20qualification.20on.20escaping.20scope.20.22locals.22.html#221555597">(Jan 04 2021 at 17:42)</a>:</h4>
<p>to me this sounds like a classical program analysis task: "can this local be referenced by the final value of the constant?"</p>



<a name="221555722"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/146212-t-compiler/const-eval/topic/const%20qualification%20on%20escaping%20scope%20%22locals%22/near/221555722" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> RalfJ <a href="https://rust-lang.github.io/zulip_archive/stream/146212-t-compiler/const-eval/topic/const.20qualification.20on.20escaping.20scope.20.22locals.22.html#221555722">(Jan 04 2021 at 17:42)</a>:</h4>
<p>and we want an analysis that answers "no" or "maybe" (so it's conservative by erring on the side of "maybe")</p>



<a name="221555771"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/146212-t-compiler/const-eval/topic/const%20qualification%20on%20escaping%20scope%20%22locals%22/near/221555771" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> RalfJ <a href="https://rust-lang.github.io/zulip_archive/stream/146212-t-compiler/const-eval/topic/const.20qualification.20on.20escaping.20scope.20.22locals.22.html#221555771">(Jan 04 2021 at 17:43)</a>:</h4>
<p>deallocated locals certainly cannot be referenced and that's why I bought your current scheme</p>



<a name="221555858"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/146212-t-compiler/const-eval/topic/const%20qualification%20on%20escaping%20scope%20%22locals%22/near/221555858" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> RalfJ <a href="https://rust-lang.github.io/zulip_archive/stream/146212-t-compiler/const-eval/topic/const.20qualification.20on.20escaping.20scope.20.22locals.22.html#221555858">(Jan 04 2021 at 17:44)</a>:</h4>
<p>though the check is a bit sketchy from a program analysis perspective, it relies on some syntactic invariants</p>



<a name="221559582"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/146212-t-compiler/const-eval/topic/const%20qualification%20on%20escaping%20scope%20%22locals%22/near/221559582" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> oli <a href="https://rust-lang.github.io/zulip_archive/stream/146212-t-compiler/const-eval/topic/const.20qualification.20on.20escaping.20scope.20.22locals.22.html#221559582">(Jan 04 2021 at 18:14)</a>:</h4>
<p>The earlier version of my PR had a dataflow analysis that properly analyzed this, but it's still analyzing for this information after the fact. During MIR building we know for sure which "locals" outlive the current MIR body's execution. Any analysis that comes later is bound to make assumptions. For example: I can construct you a MIR that has locals which have neither <code>StorageLive</code> nor <code>StorageDead</code>, but that's not a local we consider actually outliving the current body's execution. It may just be one of the odd locals created during MIR building. I guess we could call these bugs, but any bug of this kind will cause such an analysis to fall on its face.</p>



<a name="221565176"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/146212-t-compiler/const-eval/topic/const%20qualification%20on%20escaping%20scope%20%22locals%22/near/221565176" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> RalfJ <a href="https://rust-lang.github.io/zulip_archive/stream/146212-t-compiler/const-eval/topic/const.20qualification.20on.20escaping.20scope.20.22locals.22.html#221565176">(Jan 04 2021 at 18:59)</a>:</h4>
<blockquote>
<p>I can construct you a MIR that has locals which have neither StorageLive nor StorageDead, but that's not a local we consider actually outliving the current body's execution</p>
</blockquote>
<p>wait I thought we are checking for <code>StorageDead</code>?</p>



<a name="221565230"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/146212-t-compiler/const-eval/topic/const%20qualification%20on%20escaping%20scope%20%22locals%22/near/221565230" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> RalfJ <a href="https://rust-lang.github.io/zulip_archive/stream/146212-t-compiler/const-eval/topic/const.20qualification.20on.20escaping.20scope.20.22locals.22.html#221565230">(Jan 04 2021 at 18:59)</a>:</h4>
<p>so if it has neither, it has no <code>StorageDead</code> and thus would be considered outliving?</p>



<a name="221565265"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/146212-t-compiler/const-eval/topic/const%20qualification%20on%20escaping%20scope%20%22locals%22/near/221565265" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> oli <a href="https://rust-lang.github.io/zulip_archive/stream/146212-t-compiler/const-eval/topic/const.20qualification.20on.20escaping.20scope.20.22locals.22.html#221565265">(Jan 04 2021 at 18:59)</a>:</h4>
<p>jup</p>



<a name="221565290"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/146212-t-compiler/const-eval/topic/const%20qualification%20on%20escaping%20scope%20%22locals%22/near/221565290" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> oli <a href="https://rust-lang.github.io/zulip_archive/stream/146212-t-compiler/const-eval/topic/const.20qualification.20on.20escaping.20scope.20.22locals.22.html#221565290">(Jan 04 2021 at 19:00)</a>:</h4>
<p>... oh, in which case we emit the error</p>



<a name="221565320"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/146212-t-compiler/const-eval/topic/const%20qualification%20on%20escaping%20scope%20%22locals%22/near/221565320" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> oli <a href="https://rust-lang.github.io/zulip_archive/stream/146212-t-compiler/const-eval/topic/const.20qualification.20on.20escaping.20scope.20.22locals.22.html#221565320">(Jan 04 2021 at 19:00)</a>:</h4>
<p>haha</p>



<a name="221565347"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/146212-t-compiler/const-eval/topic/const%20qualification%20on%20escaping%20scope%20%22locals%22/near/221565347" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> oli <a href="https://rust-lang.github.io/zulip_archive/stream/146212-t-compiler/const-eval/topic/const.20qualification.20on.20escaping.20scope.20.22locals.22.html#221565347">(Jan 04 2021 at 19:00)</a>:</h4>
<p>so we err on the safe side</p>



<a name="221565403"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/146212-t-compiler/const-eval/topic/const%20qualification%20on%20escaping%20scope%20%22locals%22/near/221565403" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> RalfJ <a href="https://rust-lang.github.io/zulip_archive/stream/146212-t-compiler/const-eval/topic/const.20qualification.20on.20escaping.20scope.20.22locals.22.html#221565403">(Jan 04 2021 at 19:00)</a>:</h4>
<p>yeah, that's why I said "no"/"maybe" above</p>



<a name="221565456"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/146212-t-compiler/const-eval/topic/const%20qualification%20on%20escaping%20scope%20%22locals%22/near/221565456" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> RalfJ <a href="https://rust-lang.github.io/zulip_archive/stream/146212-t-compiler/const-eval/topic/const.20qualification.20on.20escaping.20scope.20.22locals.22.html#221565456">(Jan 04 2021 at 19:01)</a>:</h4>
<p>the bad case is something like</p>
<div class="codehilite" data-code-language="Rust"><pre><span></span><code><span class="n">_4</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">&amp;</span><span class="n">_3</span><span class="p">;</span><span class="w"></span>
<span class="k">if</span><span class="w"> </span><span class="kc">false</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">StorageDead</span><span class="p">(</span><span class="n">_3</span><span class="p">);</span><span class="w"> </span><span class="p">}</span><span class="w"></span>
<span class="n">_0</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">_4</span><span class="w"></span>
</code></pre></div>



<a name="221565487"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/146212-t-compiler/const-eval/topic/const%20qualification%20on%20escaping%20scope%20%22locals%22/near/221565487" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> oli <a href="https://rust-lang.github.io/zulip_archive/stream/146212-t-compiler/const-eval/topic/const.20qualification.20on.20escaping.20scope.20.22locals.22.html#221565487">(Jan 04 2021 at 19:01)</a>:</h4>
<p>which... the <code>StorageDead</code> check does, but it's not a proper dataflow analysis</p>



<a name="221565491"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/146212-t-compiler/const-eval/topic/const%20qualification%20on%20escaping%20scope%20%22locals%22/near/221565491" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> oli <a href="https://rust-lang.github.io/zulip_archive/stream/146212-t-compiler/const-eval/topic/const.20qualification.20on.20escaping.20scope.20.22locals.22.html#221565491">(Jan 04 2021 at 19:01)</a>:</h4>
<p>yea</p>



<a name="221565493"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/146212-t-compiler/const-eval/topic/const%20qualification%20on%20escaping%20scope%20%22locals%22/near/221565493" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> RalfJ <a href="https://rust-lang.github.io/zulip_archive/stream/146212-t-compiler/const-eval/topic/const.20qualification.20on.20escaping.20scope.20.22locals.22.html#221565493">(Jan 04 2021 at 19:01)</a>:</h4>
<p>which is not MIR that we ever generate, but it makes the analysis fragile by depending on some syntactic invariants</p>



<a name="221565644"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/146212-t-compiler/const-eval/topic/const%20qualification%20on%20escaping%20scope%20%22locals%22/near/221565644" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> oli <a href="https://rust-lang.github.io/zulip_archive/stream/146212-t-compiler/const-eval/topic/const.20qualification.20on.20escaping.20scope.20.22locals.22.html#221565644">(Jan 04 2021 at 19:02)</a>:</h4>
<p>so... how about I add a MIR validation check that ensures that if a local has a <code>StorageDead</code>, it has one on all execution paths that reach a <code>return</code> terminator?</p>



<a name="221565695"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/146212-t-compiler/const-eval/topic/const%20qualification%20on%20escaping%20scope%20%22locals%22/near/221565695" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> oli <a href="https://rust-lang.github.io/zulip_archive/stream/146212-t-compiler/const-eval/topic/const.20qualification.20on.20escaping.20scope.20.22locals.22.html#221565695">(Jan 04 2021 at 19:02)</a>:</h4>
<p>instead of hardening <del>promotion</del> const checking, we make this assumption an invariant of MIR</p>



<a name="221565898"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/146212-t-compiler/const-eval/topic/const%20qualification%20on%20escaping%20scope%20%22locals%22/near/221565898" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> RalfJ <a href="https://rust-lang.github.io/zulip_archive/stream/146212-t-compiler/const-eval/topic/const.20qualification.20on.20escaping.20scope.20.22locals.22.html#221565898">(Jan 04 2021 at 19:04)</a>:</h4>
<p>promotion? <em>confused</em></p>



<a name="221566070"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/146212-t-compiler/const-eval/topic/const%20qualification%20on%20escaping%20scope%20%22locals%22/near/221566070" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> oli <a href="https://rust-lang.github.io/zulip_archive/stream/146212-t-compiler/const-eval/topic/const.20qualification.20on.20escaping.20scope.20.22locals.22.html#221566070">(Jan 04 2021 at 19:06)</a>:</h4>
<p>argml</p>



<a name="221566074"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/146212-t-compiler/const-eval/topic/const%20qualification%20on%20escaping%20scope%20%22locals%22/near/221566074" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> oli <a href="https://rust-lang.github.io/zulip_archive/stream/146212-t-compiler/const-eval/topic/const.20qualification.20on.20escaping.20scope.20.22locals.22.html#221566074">(Jan 04 2021 at 19:06)</a>:</h4>
<p>const checking</p>



<a name="221566101"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/146212-t-compiler/const-eval/topic/const%20qualification%20on%20escaping%20scope%20%22locals%22/near/221566101" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> oli <a href="https://rust-lang.github.io/zulip_archive/stream/146212-t-compiler/const-eval/topic/const.20qualification.20on.20escaping.20scope.20.22locals.22.html#221566101">(Jan 04 2021 at 19:06)</a>:</h4>
<p>this all used to be one thing, and my brain keeps munging them together</p>



<a name="221566610"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/146212-t-compiler/const-eval/topic/const%20qualification%20on%20escaping%20scope%20%22locals%22/near/221566610" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> RalfJ <a href="https://rust-lang.github.io/zulip_archive/stream/146212-t-compiler/const-eval/topic/const.20qualification.20on.20escaping.20scope.20.22locals.22.html#221566610">(Jan 04 2021 at 19:10)</a>:</h4>
<p>yeah... however, that makes the invariant less local, so more fragile</p>



<hr><p>Last updated: Aug 07 2021 at 22:04 UTC</p>
</html>